﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.OleDb;

namespace DBConnect
{
    public class CommandSolicitacao
    {
        #region SolicitaçãoProcedimentos

        public static DataTable buscaSolicProcTipo(long codPrestador, string regANS, TipoGuia tipoSolic_cod)
        {
            
            string query = "SELECT numeroGuia, tipoSolic_cod, [local], sequencialTransacao, cancelada, glosa, numeroGuiaOperadora, dataEmissao " +
                "FROM SolicitacaoProcedimento " +
                "WHERE regANS = '" + regANS + "' AND codPrestador = " + codPrestador + " AND tipoSolic_cod = " + (int)tipoSolic_cod;
            return Connect.seleciona(query).Tables[0];
        }

        public static DataTable buscaSolicProcedimentos(long codPrestador, string regANS)
        {
            
            string query = "SELECT numeroGuia, tipoSolic_cod, [local], sequencialTransacao, cancelada, glosa, numeroGuiaOperadora, dataEmissao " +
                "FROM SolicitacaoProcedimento " +
                "WHERE regANS = '" + regANS + "' AND codPrestador = " + codPrestador;
            return Connect.seleciona(query).Tables[0];
        }

        public static void gravaGuiaSolicitacao(string regANS, long codPrestador, string local, TipoGuia tipoSolic, string numeroGuia)
        {
            
            string query = "INSERT INTO SolicitacaoProcedimento(numeroGuia, tipoSolic_cod, [local], regANS, codPrestador, dataEmissao) " +
                "VALUES('" + numeroGuia + "'," + Convert.ToInt32(tipoSolic) + ",'" + local + "','" + regANS + "'," + codPrestador + ", '" + DateTime.Now.ToString("dd/MM/yyyy") + "')";
            Connect.executa(query, "");
        }

        public static int verificaNumeroGuia(string regANS, long codPrestador, string numeroGuia)
        {
            
            string query = "SELECT numeroGuia FROM SolicitacaoProcedimento " +
                "WHERE numeroGuia = '" + numeroGuia + "' AND codPrestador = " + codPrestador + " AND regANS = '" + regANS + "'";
            return Connect.seleciona(query).Tables[0].Rows.Count;
        }

        /// <summary>
        /// Marca a Guia de Solicitação como Cancelada
        /// </summary>
        /// <param name="numeroGuia">Número da Guia a ser Cancelada</param>
        public static void cancelaGuiaSolicitacao(string numeroGuia, long codPrestador, string regANS)
        {
            
            string query = "UPDATE SolicitacaoProcedimento SET cancelada = True " +
                           "WHERE numeroGuia = '" + numeroGuia + "' AND codPrestador = " + codPrestador + " AND regANS = '" + regANS + "'";
            Connect.executa(query, "");
        }

        public static void removeGuiaSolicitacao(Int64 codPrestador, string numeroGuia)
        {
            
            string query = " DELETE numeroGuia " + " FROM SolicitacaoProcedimento " +
                 " WHERE codPrestador = " + codPrestador + " AND numeroGuia = '" + numeroGuia + "'";
            Connect.executa(query, "");
        }

        public static void updateStatusRecebimentoSolicProc(string regANS, long codPrestador, string numeroGuia, statusRecebimento status)
        {
            
            string query = "UPDATE SolicitacaoProcedimento SET codStatusRecebimento = " + Convert.ToInt32(status) +
                           " WHERE numeroGuia = '" + numeroGuia + "' AND codPrestador = " + codPrestador + " AND regANS = '" + regANS + "'";
            Connect.executa(query, "");
        }

        public static void updateSequencialTransacaoSolicProc(string regANS, long codPrestador, string numeroGuia, long sequencialTransacao)
        {
            
            string query = "UPDATE SolicitacaoProcedimento SET sequencialTransacao = " + sequencialTransacao +
                           " WHERE numeroGuia = '" + numeroGuia + "' AND codPrestador = " + codPrestador + " AND regANS = '" + regANS + "'";
            Connect.executa(query, "");
        }

        #region Guia Extensão

        public static void gravaGuiaSolicitacaoExt(long codPrestador, string regANS, string local, string numeroGuia)
        {
            
            string query = "INSERT INTO ExtensaoSolicProc(numeroGuia, [local], regANS, codPrestador) " +
                "VALUES('" + numeroGuia + "', '" + local + "','" + regANS + "'," + codPrestador + ")";
            Connect.executa(query, "");
        }

        public static DataTable buscaExtensaoSolicProc(long codPrestador, string regANS)
        {
            
            string query = "SELECT ID, numeroGuia, local " +
                "FROM ExtensaoSolicProc " +
                "WHERE regANS = '" + regANS + "' AND codPrestador = " + codPrestador;
            return Connect.seleciona(query).Tables[0];
        }

        public static DataTable buscaExtensaoSolicProcGuia(long codPrestador, string regANS, string numeroGuia)
        {
            
            string query = "SELECT ID, [local] " +
                "FROM ExtensaoSolicProc " +
                "WHERE regANS = '" + regANS + "' AND numeroGuia = '" + numeroGuia + "' AND codPrestador = " + codPrestador;
            return Connect.seleciona(query).Tables[0];
        }

        public static void removeExtensaoSolicProc (Int64 guiaID)
        {
            string query = "DELETE ID " + " FROM ExtensaoSolicProc " + " WHERE ID = " + guiaID;
            Connect.executa(query,"");
        }

        #endregion

        #endregion

        #region SolicitaçãoStatusProtocolo

        public static void insereStatusProcedimentoProtocolo(byte[] statusProcedimento, string numeroGuia, long idLote)
        {
            
            OleDbParameter param = new OleDbParameter("@statusProcedimentos", statusProcedimento);
            param.DbType = DbType.Binary;
            string query = "INSERT INTO StatusProcFaturamento(numeroGuia, IDLote, statusProcedimentos) " +
                "VALUES('" + numeroGuia + "', " + idLote + ", @statusProcedimentos)";
            string codStatusProcedimento = Connect.executa(query, "", param);
        }

        public static void updateStatusRecebimentoLote(long idLote, statusRecebimento statusCod)
        {
            
            string query = "UPDATE loteGuias SET codStatusRecebimento = " + Convert.ToInt64(statusCod) +
                           " WHERE ID = " + idLote;
            Connect.executa(query, "");
        }



        #endregion

        #region SolicitaçãoAutorização

        public static void insereStatusProcedimentosAutorizacao(string regANS, long codPrestador, string numeroGuia, byte[] statusProcedimentos)
        {
            /*
            OleDbParameter param = new OleDbParameter("@statusProcedimentos", statusProcedimentos);
            param.DbType = DbType.Binary;
            string query = "INSERT INTO StatusProcedimento(@statusProcedimentos) " +
                "VALUES(@statusProcedimentos)";
            string codStatusProcedimento = Connect.executa(query, "SELECT MAX(ID) FROM StatusProcedimento", param);
            query = "UPDATE SolicitacaoProcedimento SET codStatusProcedimento = " + Convert.ToInt64(codStatusProcedimento) +
                    " WHERE numeroGuia = '" + numeroGuia + "' AND codPrestador = " + codPrestador + " AND regANS = '" + regANS + "'";
            Connect.executa(query, "");*/
        }

        #endregion

        #region statusProcedimentos

        public static byte[] buscaStatusProcFaturamento(string numeroGuia, long idLote)
        {
            
            string query = "SELECT statusProcedimentos FROM StatusProcFaturamento " +
                            "WHERE numeroGuia = '" + numeroGuia + "' AND IDLote = " + idLote;
            return (byte[])Connect.seleciona(query).Tables[0].Rows[0]["statusProcedimentos"];
        }

        public static bool existeStatusProcFaturamento(string numeroGuia, long idLote)
        {
            
            string query = "SELECT COUNT(numeroGuia) AS numeroRegistros FROM StatusProcFaturamento " +
                            "WHERE numeroGuia = '" + numeroGuia + "' AND IDLote = " + idLote;
            return Convert.ToBoolean(Connect.seleciona(query).Tables[0].Rows.Count);
        }

        public static void updateStatusProcFaturamento(byte[] statusProcedimento, string numeroGuia, long idLote)
        {
            
            OleDbParameter param = new OleDbParameter("@statusProcedimentos", statusProcedimento);
            param.DbType = DbType.Binary;
            string query = "UPDATE StatusProcFaturamento SET StatusProcedimento = @statusProcedimentos " +
                           "WHERE numeroGuia = '" + numeroGuia + "' AND IDLote = " + idLote;
            Connect.executa(query, "", param);
        }

        #endregion
    }
}
